package safe;

import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author lzm
 * @date 2025/2/20 20:02
 * @description 多线程版的累加器-使用原子类解决线程不靠谱问题
 */
public class AdderV3 {

    AtomicInteger i = new AtomicInteger(0);

    /**
     * 多线程版的累加器
     */
    public void add() throws InterruptedException {
        Runnable task = () -> {
            // 将变量i加1，重复这个操作10000次
            for (int j = 0; j < 10000; j++) {
                i.getAndIncrement();
            }
        };
        // 一共有5个线程，每个线程都对变量i进行一万次+1的操作
        for (int j = 0; j < 5; j++) {
            new Thread(task, "线程-" + j).start();
        }
        TimeUnit.SECONDS.sleep(1);
    }


    public static void main(String[] args) throws InterruptedException {
        AdderV3 adder = new AdderV3();
        adder.add();
        System.out.println("计算结果是：" + adder.i);
    }

}
